MLメイル欠番検索スクリプト

動作内容:

・電信八号で、メーリングリスト等でSubject: に連番がついているメイ
 ルが存在するフォルダを調査し、欠番メイルの番号を検索する
 (このとき、コマンドメイルにそのまま貼り付けが出来るよう、
 「get XXXX」の形式で10通ずつ番号を出力します、笑)
・標準機能で件名によるソートを行うと、[hogehoge: 9999]が
 [hogehoge: 10000]よりも大きくなってしまって意図通りの順番で並ば
 ないため、Subject: の連番を基準にしたソートを行う

動作確認環境:

 電信八号(V321.2b5以降で確認しています)
 電極Z号化計画(Version 1.33で確認しています)
 (同プラグイン)外部プログラム実行(Version 1.11で確認しています)
 Perlが動作する環境

使用方法:

 1.下のスクリプトをコピーし、適当な名前で保存する
    例:mailsort.pl
   2行目の記述を書き換えることにより、欠番メイル番号を表示す
   るためのエディタ(ビューア)を指定することが出来ます。
    $edt="d:/program/den8/den0/den0.exe";
     ...エディタ(ビューア)のパス
    (注)パス区切りは‘\’ではなく‘/’で指定します

 2.電極Z号化計画−外部プログラム実行 にプログラムの追加を行う
    例:(パスは必要に応じてご変更ください)

     「外部プログラム(フォルダメニュー用)の編集」への登録
     ・メニュー表示文字列:MLメール欠番検索
     ・実行するプログラム:perl mailsort.pl %d
     ・表示条件:常に
     ・プログラム終了時にフォルダ表示を更新する:チェック

判っている不具合および改善を要す箇所:

 遅いです(汗)
 私のマシン(Celeron366MHz)で1,000通ほどメイルが存在するフォルダ
 を対象にすると約30秒ほどかかります。。。

謝辞:

 最後になりましたが、電信八号を開発された石岡さんと電八倶楽部のみ
 なさん、電極Z号化計画およびプラグインを開発された山田さんにこの
 場を借りてお礼申し上げます。
 いつも便利に使用させて頂き、ありがとうございます。こんな素晴らし
 いソフトをフリーで公開して下さっているなんて、本当に感激です。


付録:

 電信八号オフィシャルサイト http://denshin8.esprix.net/
 山田さんのホームページ http://www.kh.rim.or.jp/~s-yamada/


以上です。拙文をわざわざお読み頂き、ありがとうございました。

-- 
Osamu Ogawa / 小川 修
mailto:jikoman@ogawa.8k.com

# mailsort.pl 2000-10-27 $edt="notepad.exe"; # Write your favorite editor's path $fol=&dchange($ARGV[0])."/"; $tpf=&dchange($ENV{'TMP'})."/filesort.tmp"; @fileall=(); @filesort=(); opendir(DIR,$fol); while ($file = readdir(DIR)) { if (&small($file)=~/^[0-9][0-9][0-9][0-9].txt$/) { push(@fileall,$file); } } closedir(DIR); unless (@fileall) { exit(0) } while ($file=shift(@fileall)) { open(INI,$fol.$file); @lines=<INI>; close(INI); @mail=(); $tar=0; while ($cur=shift(@lines)) { if (&small($cur)=~/^subject: /) { $en1=index($cur."]","]"); $en2=index($cur.")",")"); if ($en1>$en2) { $en1=$en2 } $tar=substr($cur,0,$en1); $tar=~s/.*[:\s](.*[0-9])$/\1/; last; } } $tar+=10000000000; push(@filesort,substr($tar,1)."\t".$file); } @filesort=sort(@filesort); @filecheck=@filesort; @nofile=(); $cur=0; $count=10000; $tar=shift(@filecheck); rename ($fol.substr($tar,11),$fol."0000.REN"); $cur1=substr($tar,0,10)+0; while ($tar=shift(@filecheck)) { $count++; rename ($fol.substr($tar,11),$fol.substr($count,1).".REN"); $cur2=substr($tar,0,10)+0; if ($cur1 > 0) { while ($cur2>$cur1+1) { $cur1++; push(@nofile,"get ".$cur1."\n"); $cur++; if ($cur>9) { push(@nofile,"\n"); $cur=0; } } } $cur1=$cur2; } system 'ren '.$ARGV[0]."\\*.REN *.TXT"; if(@nofile) { open(OUT,"> ".$tpf); print OUT @nofile; close(OUT); exec 'start '.$edt.' '.&dcrev($tpf); } exit(0); sub small { my($a)=@_; $a=~tr/A-Z/a-z/; $a; } sub dcrev { my($a)=@_; $a=~s/\//\\/g; $a; } sub dchange { my($a)=@_; $a=~s/\\/\//g; $a; }
まえにもどる